package com.example.librarymanagement.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.librarymanagement.dto.borrowrecord.BorrowRecordListDto;
import com.example.librarymanagement.dto.daily.BookBorrowListDto;
import com.example.librarymanagement.entity.BorrowRecord;
import com.example.librarymanagement.vo.BorrowRecordTopVo;
import com.example.librarymanagement.vo.BorrowRecordVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

/**
 * @author LSQ
 */
@Repository
public interface BorrowRecordMapper extends BaseMapper<BorrowRecord> {


    /**
     * 获取借阅图书信息前几名
     *
     * @param page              分页对象
     * @param bookBorrowListDto 查询条件dto，包含借阅时间，查询对象
     * @return BorrowRecordTopVo分页对象
     */
    IPage<BorrowRecordTopVo> getBorrowRecordTopByBook(Page<BorrowRecordTopVo> page, @Param("search") BookBorrowListDto bookBorrowListDto);

    /**
     * 获取借阅期刊信息前几名
     *
     * @param page              分页对象
     * @param bookBorrowListDto 查询条件dto，包含借阅时间，查询对象
     * @return BorrowRecordTopVo分页对象
     */
    IPage<BorrowRecordTopVo> getBorrowRecordTopByPeriodical(Page<BorrowRecordTopVo> page, @Param("search") BookBorrowListDto bookBorrowListDto);

    /**
     * 分页获取图书借阅信息，或根据dto属性模糊查询属性
     *
     * @param page                分页对象
     * @param borrowRecordListDto dto（包含读者姓名和图书名称属性）
     * @return BorrowRecordVo分页对象
     */
    IPage<BorrowRecordVo> getBookBorrow(Page<BorrowRecordVo> page, @Param("search") BorrowRecordListDto borrowRecordListDto);

    /**
     * 分页获取期刊借阅信息，或根据dto属性模糊查询属性
     *
     * @param page                分页对象
     * @param borrowRecordListDto dto（包含读者姓名和期刊名称属性）
     * @return BorrowRecordVo分页对象
     */
    IPage<BorrowRecordVo> getPeriodicalBorrow(Page<BorrowRecordVo> page, @Param("search") BorrowRecordListDto borrowRecordListDto);
}
